
class LiczbaException extends Exception
{
LiczbaException() {}
LiczbaException(String opis) {super(opis);}
}

public class Liczba 
{
	
	int dziesietna=0;
	private char[] tab = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	
	Liczba(String n, int podstawa) throws LiczbaException 
	{
		//this.n=n;
		//this.podstawa=podstawa;
		char[] nowa = n.toCharArray();
		int m=0;
		if(podstawa>16 || podstawa<2) throw new LiczbaException("Zly foramt sytemu liczbowego");		
		for(int i=0; i<nowa.length; i++)
		{
			for(int j=0; j<podstawa; j++) 
			{			
				if(nowa[i]==tab[j]) m++; 
			}
			if(m==0) throw new LiczbaException("Zly zapis liczby");
			m=0;
		}


		if(podstawa==10) dziesietna=Integer.parseInt(n);
		else 
		{
			int[] nowa2 = new int[nowa.length];
			//for(int i=0; i<nowa.length; i++) System.out.println("nowa "+nowa[i]);
			for(int i=0; i<nowa.length; i++)
			{
				if(nowa[i]=='A') nowa2[i]=10;
				else if(nowa[i]=='B') nowa2[i]=11;
				else if(nowa[i]=='C') nowa2[i]=12;
				else if(nowa[i]=='D') nowa2[i]=13;
				else if(nowa[i]=='E') nowa2[i]=14;
				else if(nowa[i]=='F') nowa2[i]=15;
				else nowa2[i]=Character.getNumericValue(nowa[i]);
			}
			//for(int i=0; i<nowa.length; i++) System.out.println("nowa2 "+nowa2[i]);
			for(int i=0; i<nowa.length; i++)
			{
				dziesietna=dziesietna+(int)Math.pow(podstawa, nowa2.length-1-i)*nowa2[i];
			}		
		}
		//System.out.println(dziesietna);
	}
	
	public String zapis(int podstawa) throws LiczbaException 
	{
		if(podstawa>16 || podstawa<2) throw new LiczbaException("Zly foramt sytemu liczbowego");
		String liczba = "";
		int dziesietna2 = dziesietna;
		int start = (int)(Math.log(dziesietna)/Math.log(podstawa));
		char[] wyniki = new char[start+1];
		int k=0;
		for(int i=start; i>=0; i--)
		{
			while(dziesietna>=Math.pow(podstawa, i))
			{
				dziesietna=dziesietna-(int)Math.pow(podstawa, i);
				k++;
			}
			if(k==10) wyniki[start-i]='A';
			else if(k==11) wyniki[start-i]='B';
			else if(k==12) wyniki[start-i]='C';
			else if(k==13) wyniki[start-i]='D';
			else if(k==14) wyniki[start-i]='E';
			else if(k==15) wyniki[start-i]='F';
			else wyniki[start-i]=Character.forDigit(k, 10);
			k=0;
		}
		for(int i=0; i<=start; i++)
		{
			liczba=liczba+wyniki[i];
		}

	dziesietna = dziesietna2;		
	return liczba;
	}

	public String wypis() throws LiczbaException 
	{
		String liczba = "";
		for(int podstawa=2; podstawa<=16; podstawa++)
		{
		if(podstawa==10) liczba=liczba+Integer.toString(dziesietna)+"/";		
		else
		{
		int dziesietna2 = dziesietna;
		int start = (int)(Math.log(dziesietna)/Math.log(podstawa));
		char[] wyniki = new char[start+1];
		int k=0;
		for(int i=start; i>=0; i--)
		{
			while(dziesietna>=Math.pow(podstawa, i))
			{
				dziesietna=dziesietna-(int)Math.pow(podstawa, i);
				k++;
			}
			if(k==10) wyniki[start-i]='A';
			else if(k==11) wyniki[start-i]='B';
			else if(k==12) wyniki[start-i]='C';
			else if(k==13) wyniki[start-i]='D';
			else if(k==14) wyniki[start-i]='E';
			else if(k==15) wyniki[start-i]='F';
			else wyniki[start-i]=Character.forDigit(k, 10);
			k=0;
		}
		for(int i=0; i<=start; i++)
		{
			liczba=liczba+wyniki[i];
		}
		
		liczba=liczba+"/";
		dziesietna = dziesietna2;
	}
	}
	return liczba;
	}

	public static void main(String[] args) throws LiczbaException {
		// TODO Auto-generated method stub
		Liczba liczba = new Liczba("1F", 16);
		System.out.println(liczba.zapis(3));
		System.out.println(liczba.wypis());
	}

}
